using System;
using System.Collections.Generic;
using ns26;
using ns27;
using Triton.Game.Mono;

namespace Triton.Game.Mapping
{
	[Attribute38("BnetFriendMgr")]
	public class BnetFriendMgr : MonoClass
	{
		public int m_maxFriends => method_2<int>("m_maxFriends");

		public int m_maxReceivedInvites => method_2<int>("m_maxReceivedInvites");

		public int m_maxSentInvites => method_2<int>("m_maxSentInvites");

		public List<BnetPlayer> m_friends => method_3<Class271<BnetPlayer>>("m_friends")?.method_25();

		public List<BnetInvitation> m_receivedInvites => method_3<Class271<BnetInvitation>>("m_receivedInvites")?.method_25();

		public List<BnetInvitation> m_sentInvites => method_3<Class271<BnetInvitation>>("m_sentInvites")?.method_25();

		public PendingBnetFriendChangelist m_pendingChangelist => method_3<PendingBnetFriendChangelist>("m_pendingChangelist");

		public static ulong nextIdToken => MonoClass.smethod_6<ulong>(TritonHs.MainAssemblyPath, "", "BnetFriendMgr", "nextIdToken");

		public BnetFriendMgr(IntPtr address, string className)
			: base(address, className)
		{
		}

		public BnetFriendMgr(IntPtr address)
			: this(address, "BnetFriendMgr")
		{
		}

		public static BnetFriendMgr Get()
		{
			return MonoClass.smethod_15<BnetFriendMgr>(TritonHs.MainAssemblyPath, "", "BnetFriendMgr", "Get", Array.Empty<object>());
		}

		public void Initialize()
		{
			method_8("Initialize");
		}

		public void Shutdown()
		{
			method_8("Shutdown");
		}

		public int GetMaxFriends()
		{
			return method_11<int>("GetMaxFriends", Array.Empty<object>());
		}

		public int GetMaxReceivedInvites()
		{
			return method_11<int>("GetMaxReceivedInvites", Array.Empty<object>());
		}

		public int GetMaxSentInvites()
		{
			return method_11<int>("GetMaxSentInvites", Array.Empty<object>());
		}

		public bool IsFriend(BnetPlayer player)
		{
			return method_10<bool>("IsFriend", new Class276.Enum20[1] { Class276.Enum20.Class }, new object[1] { player });
		}

		public List<BnetPlayer> GetFriends()
		{
			return method_14<Class271<BnetPlayer>>("GetFriends", Array.Empty<object>())?.method_25();
		}

		public int GetFriendCount()
		{
			return method_11<int>("GetFriendCount", Array.Empty<object>());
		}

		public bool HasOnlineFriends()
		{
			return method_11<bool>("HasOnlineFriends", Array.Empty<object>());
		}

		public int GetOnlineFriendCount()
		{
			return method_11<int>("GetOnlineFriendCount", Array.Empty<object>());
		}

		public int GetActiveOnlineFriendCount()
		{
			return method_11<int>("GetActiveOnlineFriendCount", Array.Empty<object>());
		}

		public bool IsNonPendingFriend(BnetPlayer player)
		{
			return method_10<bool>("IsNonPendingFriend", new Class276.Enum20[1] { Class276.Enum20.Class }, new object[1] { player });
		}

		public bool IsPendingFriend(BnetPlayer player)
		{
			return method_10<bool>("IsPendingFriend", new Class276.Enum20[1] { Class276.Enum20.Class }, new object[1] { player });
		}

		public List<BnetPlayer> GetPendingFriends()
		{
			return method_14<Class271<BnetPlayer>>("GetPendingFriends", Array.Empty<object>())?.method_25();
		}

		public List<BnetInvitation> GetReceivedInvites()
		{
			return method_14<Class271<BnetInvitation>>("GetReceivedInvites", Array.Empty<object>())?.method_25();
		}

		public List<BnetInvitation> GetSentInvites()
		{
			return method_14<Class271<BnetInvitation>>("GetSentInvites", Array.Empty<object>())?.method_25();
		}

		public void AcceptInvite(BnetInvitationId inviteId)
		{
			method_8("AcceptInvite", inviteId);
		}

		public void DeclineInvite(BnetInvitationId inviteId)
		{
			method_8("DeclineInvite", inviteId);
		}

		public void IgnoreInvite(BnetInvitationId inviteId)
		{
			method_8("IgnoreInvite", inviteId);
		}

		public void RevokeInvite(BnetInvitationId inviteId)
		{
			method_8("RevokeInvite", inviteId);
		}

		public void SendInvite(string name)
		{
			method_8("SendInvite", name);
		}

		public void SendInviteByEmail(string email)
		{
			method_8("SendInviteByEmail", email);
		}

		public void SendInviteByBattleTag(string battleTagString)
		{
			method_8("SendInviteByBattleTag", battleTagString);
		}

		public bool RemoveFriend(BnetPlayer friend)
		{
			return method_11<bool>("RemoveFriend", new object[1] { friend });
		}

		public void InitMaximums()
		{
			method_8("InitMaximums");
		}

		public void ProcessPendingFriends()
		{
			method_8("ProcessPendingFriends");
		}

		public void OnPendingPlayersChanged(BnetPlayerChangelist changelist, object userData)
		{
			method_8("OnPendingPlayersChanged", changelist, userData);
		}

		public void Clear()
		{
			method_8("Clear");
		}

		public void FireChangeEvent(BnetFriendChangelist changelist)
		{
			method_8("FireChangeEvent", changelist);
		}

		public void AddPendingFriend(BnetPlayer friend)
		{
			method_8("AddPendingFriend", friend);
		}

		public void RemovePendingFriend(BnetPlayer friend)
		{
			method_8("RemovePendingFriend", friend);
		}

		public void FirePendingFriendsChangedEvent()
		{
			method_8("FirePendingFriendsChangedEvent");
		}

		public int Cheat_RemoveCheatFriends()
		{
			return method_11<int>("Cheat_RemoveCheatFriends", Array.Empty<object>());
		}
	}
}
